package com.ftg.learn.privilege.controller;

import com.ftg.learn.privilege.entity.Dept;
import com.ftg.learn.privilege.service.DeptService;
import com.ftg.learn.privilege.util.ResultType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * controller 控制层
 *  client - server
 * @author KangJx
 * @date 2021/5/28
 * @RestController 完成把当前类注入到spring容器里面s
 *  并把方法返回时，全部转换成json [json前端]
 *  List<Dept> 重量级传输协议
 *  String 格式是固定
 */
@RestController
@Api(tags = "关于部门管理")
public class DeptController {

    @Autowired
    DeptService deptService;

    /**
     * 就是让用户访问当前show方法！ - servce - showall - mapper- showall
     *  showall - connection db - execute(select * from dept)
     *  list<dept>controller
     *
     *  1创建一个页面
     *  2把方法返回值放置到页面上
     *
     *  //把当前方法show添加一个 http通信协议
     * @return
     */
    @GetMapping("/show")
    @ApiOperation("用查询全部部门信息")
    public List<Dept> show(){
        return deptService.showAll();
    }

    @ApiOperation("用名称查询全部部门信息")
    @GetMapping("/showbyname")
    public List<Dept> showbyname(@ApiParam("部门名称") String name){
        return deptService.showAllForName(name);
    }

    @ApiOperation("用pathvaiable方式完成按名称查询全部部门信息")
    @GetMapping("/showbyname1/{name}")
    public List<Dept> showbyname1(@PathVariable("name") String name){
        return deptService.showAllForName(name);
    }

    @ApiOperation("按部门编号范围进行查询")
    @GetMapping("/gtlt/{p1}/{p2}")
    public List<Dept> gtlt(@ApiParam("开始") @PathVariable("p1") Integer p1,
                           @ApiParam("结束") @PathVariable("p2") Integer p2){
        return deptService.gtlt(p1,p2);
    }

    /**
     * 添加方法，通过部门dept信息添加一行数据
     * 以参数 方式 向后台传递dept里面第一个属性的真实数据
     * @param dept  参数封装以后的实体
     * @return  number 响应的行数
     */
    @PostMapping("/save")
    @ApiOperation("部门添加操作")
    public int saveDept(@ApiParam("部门实体信息") Dept dept){
        System.out.println(dept.getDname());
        System.out.println(dept.getLoc());
        return 1;
    }

    /**
     * 这是一个添加方法，带参数的，参数以RequestBody
     * 传递
     * @RequestBody : 以请求体传递json参数
     * required = false参数是否为必填项
     * {
     *     "key":value,
     *     "key":value,
     *     。。。。
     * }
     * postman里如何传递： body - raw(json) - 编写json结构
     *
     * @param dept
     * @return
     */
    @PostMapping("/save1")
    @ApiOperation("部门添加操作")
    public int saveDept1(@ApiParam("部门实体") @RequestBody Dept dept){
        return deptService.saveDept(dept);
    }

    /**
     * 修改操作
     * @param dept 部门实体类
     * @return  resulttype
     */
    @PutMapping("/modify")
    @ApiOperation("部门修改操作")
    public ResultType updateDept(@ApiParam("部门实体") @RequestBody Dept dept){
        return deptService.modifyDept(dept);
    }

    /**
     * 这个删除操作
     * @param deptno  部门编号
     * @return   ResultType
     */
    @DeleteMapping("/del/{deptno}")
    @ApiOperation("部门删除操作")
    public ResultType delete(@ApiParam("部门主键") @PathVariable Integer deptno){
        return deptService.deleteDeptno(deptno);
    }

}
